package com.ljy.my_study.lintcode.二进制中有多少个1;
/** 
* @author James
* @date 2018年9月28日 
*/
public class TestMain {
//	描述
//	计算在一个 32 位的整数的二进制表示中有多少个 1.
//
//	您在真实的面试中是否遇到过这个题？  
//	样例
//	给定 32 (100000)，返回 1
//
//	给定 5 (101)，返回 2
//
//	给定 1023 (1111111111)，返回 10
	public static void main(String[] args) {
//		System.out.println(-1*2);
//		System.out.println(-2147483648/2);
//		System.out.println(-2147483648-1);
//		System.out.println((int)Math.pow(2, 31)+1);
//		System.out.println(-1/2);
//		System.out.println(-1%2);
		System.out.println(countOnes(-1));
	}
	
	public static int countOnes(int num) {
		int count=0;
		if(num<0) {
			count++;
			num=num^(-2147483648);
		}
		while(num>=2) {
			count+=num%2;
			num=num/2;
		}
		count+=num;
		return count;
	}
}
